package com.qf.service;

import com.qf.constant.CacheConstants;
import com.qf.feign.CacheFeign;
import com.qf.model.StandardSubmit;
import com.qf.util.PushMsgUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * 实现黑名单过滤策略
 *
 *     "phase,black,limitFiveMinutes,dirtyWords,fee,router".split(,)
 */
@Service("black")
@Slf4j
public class BlackFilterServiceImpl implements FilterChainService {

    @Autowired
    private CacheFeign cacheFeign;
    @Autowired
    private PushMsgUtil pushMsgUtil;
    /**
     * 实现黑名单过滤策略
     * @param standardSubmit
     * @return
     */
    @Override
    public boolean strategy(StandardSubmit standardSubmit) {
        System.out.println("====实现黑名单过滤策略====");
        //黑名单过滤 : 平台实现系统级的手机号黑名单控制，限制某些号码的消息的发送，对发送短信进行过滤.
        //- 如果是黑名单就把发送日志存到Elasticsearch
        //- 如果同时是HTTP的发送方式就模拟出状态报告推送给客户
        //1.获取目标手机号
        String mobile = standardSubmit.getDestMobile();
        //2.拼接出Redis中对应的key
        String key = CacheConstants.CACHE_PREFIX_BLACK + mobile;
        //3. 根据key去缓存模块中查询数据
        String value = cacheFeign.get(key);
        //4. 如果查询出的数据为null, 当前手机号不属于黑名单 ，返回true即可
        if (StringUtils.isEmpty(value)){
            log.info("[策略模块 - 黑名单策略] 黑名单策略执行成功！！！");
            System.out.println("===[策略模块 - 黑名单策略] 黑名单策略执行成功！！！该手机号："+mobile+"不在黑名单内===");
            return true;
        }else {
            //5. 如果查询出的数据不为null, 当前手机号属于黑名单 ，发送两个消息到MQ，并且return false
            log.info("[策略模块 - 黑名单策略] 黑名单策略执行失败!!!黑名单手机号："+mobile);
            System.out.println("===执行失败，发送消息到MQ===");
/*            //6. 将submit发送到写日志topic队列中,让ES保存当前Submit信息
            pushMsgUtil.sendLog(standardSubmit, StrategyConstants.STRATEGY_ERROR_BLACK);
            //7. 将Standar
            dReport对象封装,发送到状态报告topic队列中,让接口模块给用户推送
            if (SourceType.HTTP==standardSubmit.getSource()){
                pushMsgUtil.pushReport(standardSubmit,StrategyConstants.STRATEGY_ERROR_BLACK );
            }*/
            return false;
        }
    }
}

